﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BusinessLayer;
using Common;

namespace BoletoElectronicoDesktop.AbmRol
{
    public partial class FormAbmRol : FormListDelete 
    {
        public FormAbmRol(Util.Funcionalidad Use): base (Use)
        {
            InitializeComponent();
        }

        public void buttonBuscar_Click(object sender, EventArgs e)
        {
            dsBoleto ds = BizRol.retrieveRolesByFilter(this.txtNombre.Text);

            if (ds.Rol.Count != 0)
            {
                this.dataGridRoles.DataSource = ds.Rol;
            }
            else if (String.IsNullOrEmpty(this.txtNombre.Text))
            {
                MessageBox.Show("No existen registros en el sistema.", "Mensaje",MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("No existen registros para el criterio de busqueda ingresado.","Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void buttonCrear_Click(object sender, EventArgs e)
        {
            try
            {
                FormAltaRol frm;
                if (this.MdiParent.MdiChildren.Any(f => f is FormAltaRol))
                {
                    frm = (FormAltaRol)this.MdiParent.MdiChildren.First(f => f is FormAltaRol);
                }
                else
                {
                    frm = new FormAltaRol((new dsBoleto.RolDataTable()).NewRolRow(), Util.Funcionalidad.RolAlta);
                    frm.MdiParent = this.MdiParent;
                }

                frm.Show();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void dataGridRoles_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
                OnDGWSelectedItem();
        }

        private void OnDGWSelectedItem()
        {
            dsBoleto.RolRow ur = (dsBoleto.RolRow)((DataRowView)(dataGridRoles.CurrentRow.DataBoundItem)).Row;
            switch (dataGridRoles.CurrentCell.ColumnIndex)
            {
                case 1://Edit
                    btnEdit_Click(ur.IdRol);
                    break;
                case 2://Delete
                    if (UserAllowed(Util.Funcionalidad.RolBaja))
                    {
                        btnEliminar_Click(ur.IdRol);
                    }
                    else
                    {
                        MessageBox.Show("Ud. No tiene permisos como para realizar esta operacion.-");
                    }
                    break;

                default:
                    break;
            }
        }

        private void btnEdit_Click(int IdRol)
        {
            try
            {
                dsBoleto.RolRow rr = (dsBoleto.RolRow)((DataRowView)(dataGridRoles.CurrentRow.DataBoundItem)).Row;
                FormAltaRol frm;
                if (this.MdiParent.MdiChildren.Any(f => f is FormAltaRol))
                {
                    frm = (FormAltaRol)this.MdiParent.MdiChildren.First(f => f is FormAltaRol);
                }
                else
                {
                    frm = new FormAltaRol(rr, Util.Funcionalidad.RolModificacion);
                    frm.MdiParent = this.MdiParent;
                }

                frm.Show();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnEliminar_Click(int IdRol)
        {
            DialogResult result = MessageBox.Show("¿Esta Seguro que desea eliminar el rol seleccionado?",
                                             "Eliminar Rol", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                bool deleted = BizRol.removeRol(IdRol);
                if (deleted)
                {
                    int ind = dataGridRoles.CurrentRow.Index;
                    dataGridRoles.Rows.RemoveAt(ind);
                }
                else
                {
                    MessageBox.Show("No se pudo eliminar");
                }
            }
        }
    }
}
